<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			//1.let命令
			    //1.1 基本用法
			    		//let命令用来声明变量，类似于var，但是所声明的变量只在let命令所在的代码块内有效
//							        {
//										let a = 10;
//										var b = 1;
//									}
//									console.log(a);//a is not defined
//									console.log(b);//1
//		
//		                            var a = [];
//									for (let i = 0; i < 10; i++) {
//									  a[i] = function () {
//									    console.log(i);
//									  };
//									}
//									a[6](); // 6
                  //1.2 不存在变量提升
                         // var 的情况
//							console.log(foo); // 输出undefined
//							var foo = 2;
						// let 的情况
//							console.log(bar); // 报错ReferenceError
//							let bar = 2;
							
	              //1.3 暂时性死区
	                 //在代码块内，使用let命令声明变量之前，该变量都是不可用的。这在语法上，称为“暂时性死区”（temporal dead zone，简称 TDZ）
//			              		var tmp = 123;
//								if (true) {
//								  tmp = 'abc'; // 报错ReferenceError
//								  let tmp;
//								}
	              //1.4 不允许重复声明
//						{
//							let a = 10;
//							let a = 1;
//						}  //报错ReferenceError
        
         //2.块级作用域
         //3.const命令
             //3.1 基本用法
                 //const声明一个只读的常量。一旦声明，常量的值就不能改变。
             //3.2 本质
                 //const实际上保证的，并不是变量的值不得改动，而是变量指向的那个内存地址所保存的数据不得改动。
             //3.3 ES6声明变量的六种方法
                 //var function (ES5)
                 //let const import class
         //4.顶层对象的属性
             //顶层对象，在浏览器环境指的是window对象，在 Node 指的是global对象。ES5 之中，顶层对象的属性与全局变量是等价的。
			 //let命令、const命令、class命令声明的全局变量，不属于顶层对象的属性
                 let b = 1;
                 console.log(window.b); // undefined
		</script>
	</body>
</html>
